package com.coolt.server.control;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.coolt.client.model.Item;
import com.coolt.server.util.HibernateUtil;

/**
 * Entity Class for Items
 */
public class ItemBO {

	/**
	 * List Items
	 */
	public List<Item> listar(Item item, int tamPagina, int pageNow) {

		List<Item> lista = null;

		DetachedCriteria criterialista = DetachedCriteria.forClass(Item.class);

		if (item.getCdtipoitem() != null) {
			criterialista.add(Restrictions.eq("cdtipoitem", item
					.getCdtipoitem()));
		}
		String filtro = item.getNmitem();
		if (filtro == null) {
			filtro = item.getTitulo_english();
		}
		if (filtro != null) {
			filtro = filtro.trim();
			// search also for titulo_original
			Item item2 = new Item();
			item2.setTitulo_original(filtro);

			criterialista.add(Restrictions.or(Example.create(item).ignoreCase()
					.enableLike(MatchMode.ANYWHERE), Example.create(item2)
					.ignoreCase().enableLike(MatchMode.ANYWHERE)));

		} else {
			criterialista.add(Example.create(item).ignoreCase().enableLike(
					MatchMode.ANYWHERE));
		}
		criterialista.addOrder(Order.desc("dtcotacao"));

		Session session = HibernateUtil.getSession();
		session.beginTransaction();

		Criteria criteria = criterialista.getExecutableCriteria(session);
		if (tamPagina > 0) {
			criteria.setMaxResults(tamPagina);
			if (pageNow > 1) {
				criteria.setFirstResult((pageNow - 1) * tamPagina);
			}
		}

		lista = criteria.list();

		session.getTransaction().commit();

		return lista;
	}

}
